package dao

import (
	"fmt"
	"my-crawler/concurrence/model"
	"my-crawler/database/redis"
	"my-crawler/distributed/config"
	"net"
	"net/rpc/jsonrpc"
)

//通过通道来进行存储 接收goroutine发来的item 发送完毕就可以结束了，存储过程在另外一个常驻的goroutine中进行，大幅减少开启goroutine的时间

func SaveChannel() chan model.SaveItem {
	//任务开始时先创建这个通道
	//这里不仅可以初始化一些其他事情 例如初始化数据库 减少连接
	out := make(chan model.SaveItem, 1)
	client := redis.RedistPool
	go func() {
		itemCount := 0
		for {
			item := <-out //接收 engine发过来的item
			fmt.Println("我们收到值了 大佬！")
			itemCount++
			SaveInRedis(client, item)
		}
	}()
	return out
}

func SaveChannelByJsonRpc() chan model.SaveItem {
	out := make(chan model.SaveItem)
	dial, err := net.Dial("tcp", config.TcpPort)
	if err != nil {
		panic("connection failed!")
	}
	client := jsonrpc.NewClient(dial)

	go func() {
		itemCount := 0
		for {
			item := <-out //接收 engine发过来的item
			fmt.Println("JSON RPC收到值了 大佬！")
			itemCount++
			var result string //ok
			sendErr := client.Call(
				config.SaveRPCMethod,
				item, //其实就是按参数传递
				&result,
			)
			fmt.Println(result, sendErr)
		}
	}()
	return out
}
